package com.lpf.example.example02.server;

import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.LengthFieldBasedFrameDecoder;
import io.netty.handler.codec.LengthFieldPrepender;
import io.netty.handler.codec.string.StringDecoder;
import io.netty.handler.codec.string.StringEncoder;
import io.netty.util.CharsetUtil;

/**
 * 绑定客户端连接时候触发操作
 *
 * 客户端和服务端一旦连接之后MyServerInitializer就会被创建并且initChannel方法会被调用。
 */
public class MyServerInitializer extends ChannelInitializer<SocketChannel> {

    @Override
    protected void initChannel(SocketChannel ch) throws Exception {

        ChannelPipeline pipeline = ch  .pipeline();

        // 负载http 请求编码解码
        //pipeline.addLast("httpServerCodec",new HttpServerCodec());

        // 实际处理请求
        //pipeline.addLast("httpServerHandler",new HttpServerHandler());
        pipeline.addLast(new LengthFieldBasedFrameDecoder(Integer.MAX_VALUE, 0, 4, 0, 4));

        // 将数据的长度加到前边（加到头里）
        pipeline.addLast(new LengthFieldPrepender(4));

        // 字符串编解码处理器
        pipeline.addLast(new StringDecoder(CharsetUtil.UTF_8));
        pipeline.addLast(new StringEncoder(CharsetUtil.UTF_8));

        // 自定义的处理器（最后一个处理器一般都是我们自己提供的）
        pipeline.addLast(new MyServerHandler());
    }
}